package cn.com.fattiger.framework;

/**
 * 
 * SelectSort
 * 
 * @author fattiger.xiaoyang
 * @date 2016/12/15
 * @qqGroup 454655009
 * @desc 选择排序 外循环遍历 假设遍历因子为最小索引 子循环 会从排好顺序的索引往后对比找最小的 只要找到比当前小的 就替换索引 子循环结束后
 *       对比设定索引和对比的最小索引是否一致 如果不一致，说明假设的索引不是最小的 所以用最新最小索引置换设定的位置的值 有人把选择和冒泡最对比，
 *       其实他们最大的区别就是他们数据的交换时机， 冒泡是发现比它小的就交换，而选择排序是记录的最小位置，确定了最小的位置才交换。
 */
public class SelectSort {

	public static void main(String[] args) {
		int a[] = { 3, 2, 5, 1, 2, 3, 8 };
		sort(a);
		for (int m : a) {
			System.out.print(m);
		}
	}

	public static void sort(int[] a) {
		for (int i = 0; i < a.length - 1; i++) {
			int min = i;
			for (int j = i + 1; j < a.length; j++) {
				if (a[j] < a[min]) { // 如果小于设定最小值 替换下标
					min = j;
				}
			}
			//置换最小值
			if (i != min) {
				int temp = a[i];
				a[i] = a[min];
				a[min] = temp;
			}
		}
	}

	public static void sort1(int[] a) {
		for (int i = 0; i < a.length - 1; i++) {
			int min = i;
			for (int j = i + 1; j < a.length; j++) {
				if (a[j] < a[min]) {
					min = j;
				}
			}
			if (i != min) {
				int temp = a[i];
				a[i] = a[min];
				a[min] = temp;
			}
		}
	}
}
